]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
main, lightbox: Fix lightbox for zoomed windows
authorStefano Facchini <stefano.facchini@gmail.com>
Wed, 15 Feb 2012 15:16:23 +0000 (16:16 +0100)
committerStefano Facchini <stefano.facchini@gmail.com>
Wed, 15 Feb 2012 17:18:46 +0000 (18:18 +0100)
The correct way to make an actor having the same size as another is
a ClutterBindConstraint. Connecting to 'allocation-changed' fails because
the allocation might not change even when 'width' and 'height' properties do.
This is the case of Main.uiGroup, used as parent container for zoomed
window clones.

In lightbox.js we bind also the position because in principle it could change,
even if currently only fullscreen lightboxes are used.

js/ui/lightbox.js
js/ui/main.js

index f8c84627f98faa73b4925b5dd27521d513a28f07..aa1516094ce15d39a6e7ad489c9db0530eef681e 100644 (file)
@@ -1,5 +1,6 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 
+const Clutter = imports.gi.Clutter;
 const Lang = imports.lang;
 const Meta = imports.gi.Meta;
 const St = imports.gi.St;
@@ -57,11 +58,10 @@ const Lightbox = new Lang.Class({
         if (params.width && params.height) {
             this.actor.width = params.width;
             this.actor.height = params.height;
-            this._allocationChangedSignalId = 0;
         } else {
-            this.actor.width = container.width;
-            this.actor.height = container.height;
-            this._allocationChangedSignalId = container.connect('allocation-changed', Lang.bind(this, this._allocationChanged));
+            let constraint = new Clutter.BindConstraint({ source: container,
+                                                          coordinate: Clutter.BindCoordinate.ALL });
+            this.actor.add_constraint(constraint);
         }
 
         this._actorAddedSignalId = container.connect('actor-added', Lang.bind(this, this._actorAdded));
@@ -70,16 +70,6 @@ const Lightbox = new Lang.Class({
         this._highlighted = null;
     },
 
-    _allocationChanged : function(container, box, flags) {
-        Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
-            this.actor.width = this.width;
-            this.actor.height = this.height;
-            return false;
-        }));
-        this.width = this._container.width;
-        this.height = this._container.height;
-    },
-
     _actorAdded : function(container, newChild) {
         let children = this._container.get_children();
         let myIndex = children.indexOf(this.actor);
@@ -187,8 +177,6 @@ const Lightbox = new Lang.Class({
      * by destroying its container or by explicitly calling this.destroy().
      */
     _onDestroy: function() {
-        if (this._allocationChangedSignalId != 0)
-            this._container.disconnect(this._allocationChangedSignalId);
         this._container.disconnect(this._actorAddedSignalId);
         this._container.disconnect(this._actorRemovedSignalId);
 
index 6b7218b71392193f10cdaa7106207bd00de6b4de..6d8f4acf093bc823dcb4919fc9a70b5c9a8645f5 100644 (file)
@@ -187,6 +187,9 @@ function start() {
                         for (let i = 0; i < children.length; i++)
                             children[i].allocate_preferred_size(flags);
                     });
+    let constraint = new Clutter.BindConstraint({ source: global.stage,
+                                                  coordinate: Clutter.BindCoordinate.SIZE });
+    uiGroup.add_constraint(constraint);
     St.set_ui_root(global.stage, uiGroup);
     global.window_group.reparent(uiGroup);
     global.overlay_group.reparent(uiGroup);